home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / amos / anim2bob.lha / Anim2Bob.amos / Anim2Bob.amosSourceCode next >
AMOS Source Code  |  1992-09-02  |  12KB  |  303 lines

  1. Rem unfold readme for docs...
  2. Procedure _README
  3. ' ********************************************************************** 
  4. ' *                                                                    * 
  5. ' *                     Anim 2 Bob 1.0 By Scally 1996.                 * 
  6. ' *          Grab sprites from anim frames like any sprite grabber.    * 
  7. ' *          I use this (with 'DpaintV' To rotate sprites smoothly)    * 
  8. ' *          rather than grabbing a sprite a time...This grabs         * 
  9. ' *          sequences of bobs from your anim....                      * 
  10. ' *          Check out the MicroFluff ACC*s* style  message bar        * 
  11. ' *          Click the centre of the screen ( or none hot-zone)        *     
  12. ' *          To Refresh the display                                    * 
  13. ' *          Bugs,problems,wanted features etc ---> CA3TN@DMU.AC.UK    * 
  14. ' *                                                                    * 
  15. ' ********************************************************************** 
  16. ' Bank 1 = Bobs
  17. ' Bank 5 = Anim
  18. ' Bank 7 = Pic 
  19.  
  20. ' ************************* INSTRUCTIONS ******************************  
  21. '
  22. '                      RIGHT HAND SIDE OF SCREEN...      
  23. ' Left Click 'Load Anim' to load an anim      (* only frames specified are loaded *) 
  24. ' Left Click 'Grab' to grab an area of the screen like a sprite grabber  
  25. '             It will now cycle through the animation grabbing the area  
  26. '             specified  as an image number... 
  27. '
  28. ' Right Click 'Grab' to erase the bob bank and grab an area of screen  
  29. '              like a sprite grabber etc.  
  30. '
  31. ' Left Click   'View' to see the bob bank cycled 
  32. '              Start = Bob Number    End = End of Anim Number
  33. '              Hold Down Left Mouse Button to exit 
  34. '
  35. 'Left Click    ' Save' to save the bob bank currently in memory
  36.  
  37. '                  LEFT HAND SIDE OF SCREEN... 
  38.  
  39. '   Left Click ' Load Bob' to load a bob bank    
  40. '
  41. '   The Boxes on the bottom left of the screen have arrows 
  42. '   for decreasing and increasing Anim and Bob numbers accordingly.  
  43. '    
  44. '   Left Clicking  on the left + right arrow in the box which says 
  45. '                  'Bob' sets the start image for grabbing from an anim
  46. '
  47. '   Left Clicking  on the left + right arrow in the box which says 
  48. '                  'Anim' sets the start frame for grabbing from     
  49. '
  50. '   Right Clicking  on the left + right arrow in the box which says                  
  51. '                  'Anim' sets the end frame to finish at  
  52. '  
  53. End Proc
  54.  
  55.  
  56.  
  57.  
  58.  
  59. CFLAG=0 : Rem       (0 = SHOW TIME)  (1 = NO TIME)   Click centre of the screen to update the clock... 
  60. MEMCHUNK=400 : Rem less than 400k and the options pop up  
  61. Change Mouse 3 : Rem clock image
  62. X=Chip Free
  63. XX=Fast Free
  64. X=(X+XX)/1000 : Rem convert Total Bytes to Kilobytes 
  65. If X<MEMCHUNK Then LOWMEM[X] Else Goto BEGIN
  66. Procedure LOWMEM[X]
  67.    Screen Open 0,640,100,8,Hires : Curs Off : Palette $1 : Cls 0 : Screen Display 0,,150,Screen Width,Screen Height-30 : Cls 0
  68.    Palette $1,$0,$FF,$F0,$2,$FFF,$2F2 : Paper 0
  69.    Pen 3 : Locate 16,1 : Print " Low Memory ";X;"K Total ";Chip Free/1000;"K Chip"
  70.    Pen 5 : Locate 16,2 : Print "----------------------------------------------------"
  71.    Locate 16,3 : Print "1> Close Workbench and Amos Editor   ( left  mouse ) "
  72.    Locate 16,4 : Print "2> Carry on as normal                ( right mouse ) "
  73.    Locate 16,5 : Print "3> Continue                          ( Space Bar   ) "
  74.    Pen 2
  75.    Repeat 
  76.       A$=Inkey$ : If Mouse Key=1 Then Locate 34,6 : Print "  Close All     " : C=1
  77.       If Mouse Key=2 Then Locate 34,6 : Print "Keep Them Open      " : C=2
  78.    Until A$=" "
  79.    If C=1 Then Screen Close 0 : Close Editor : Close Workbench 
  80.    If C=2 Then Screen Close 0 : Pop Proc
  81. End Proc
  82.  
  83. Close : Rem needed only when run from the editor...(* to handle ^c breaks on open files... *)  
  84.  
  85. BEGIN:
  86. _SCREEN
  87. Procedure _SCREEN
  88.    Unpack 7 To 1 : Double Buffer : Autoback 0
  89.    Wait Vbl : Screen Open 0,320,256,32,0 : Curs Off : Cls 0 : Paper 0 : Double Buffer : Autoback 0 : Palette $0,$33 : Screen Hide 0
  90.    Flash Off : Bob Update Off : Sprite Update Off : Update Off 
  91.    Screen Copy Logic To Physic : Update Off 
  92.    Screen Open 2,640,15,2,Hires+Laced : Palette $1,$FFF : Ink 1 : Cls 0 : Paper 0 : Screen Display 2,,50,Screen Width,Screen Height-5 : Curs Off : Cls 0 : Text 2,7,"                  Anim To Bob Grabber V1.0  by Scally 1996"
  93.    Screen 1 : Ink 18
  94. End Proc
  95. Procedure CMAP
  96.    ' The Blue hue on the main screen... 
  97.    For N=1 To 31
  98.       C=N+(N*N)+N
  99.       Colour N,C
  100.    Next N
  101.    Palette $0,$33
  102. End Proc
  103.  
  104. Global F$,F,NUM,FRAMES,GX1,GX2,GY1,GY2,FILE,BANK_DONE,SF
  105. Procedure SETUP_ZONES
  106.    Reserve Zone 11
  107.    Set Zone 1,280,10 To 310,30
  108.    Set Zone 2,280,50 To 310,70
  109.    Set Zone 3,280,90 To 310,110
  110.    Set Zone 4,280,130 To 310,150
  111.    Set Zone 5,280,170 To 310,190
  112.    Set Zone 6,10,174 To 30,198
  113.    Set Zone 7,61,174 To 85,198
  114.    Set Zone 8,10,122 To 30,146
  115.    Set Zone 9,61,122 To 85,146
  116.    Set Zone 10,61,50 To 85,70
  117.    Set Zone 11,10,50 To 30,70
  118. End Proc
  119.  
  120. G=1 : Rem start of bob#
  121. SF=25 : Rem length of anim to record to  
  122. BF=1 : Rem start of anim to record from 
  123.  
  124. '********************************************************
  125. '***************** Load & Grab Routines *****************  
  126.  
  127. Procedure _OPEN[SF]
  128.    Close 
  129.    F$=Fsel$("*.anim","*.anim","Load IFF Anim")
  130.    If F$="" Then Goto SMEG
  131.    If Right$(F$,4)="anim"
  132.       FILE=1
  133.       Open In 1,F$
  134.       F=Frame Length(1,999)
  135.       FRAMES=Frame Load(1 To 5,SF)
  136.       Close 
  137.    End If 
  138.    Locate 10,10 : Print F2$ : Screen Copy Logic To Physic
  139.    MEM=(Chip Free+Fast Free)/1000
  140.    Paper 0 : Pen 15 : Locate 1,30 : Print F/1000;"k", : Screen Copy Logic To Physic
  141.    SMEG:
  142. End Proc
  143.  
  144. Procedure GROWBOX
  145.    Rem why re-invent the wheel!!! 
  146.    Gr Writing 2
  147.    Repeat 
  148.       If Mouse Key=1
  149.          Rem Get coordinates of top corner
  150.          GX1=X Screen(X Mouse) : GY1=Y Screen(Y Mouse) : GX2=GX1 : GY2=GY1
  151.          While Mouse Key=1
  152.             Rem Drag box around with the mouse 
  153.             Box GX1,GY1 To GX2,GY2
  154.             GX2=X Screen(X Mouse) : GY2=Y Screen(Y Mouse)
  155.             Box GX1,GY1 To GX2,GY2
  156.             Screen Copy Logic To Physic
  157.          Wend 
  158.          Box GX1,GY1 To GX2,GY2 : GRABBED=True
  159.          Rem Make GX1,GY1 the coords of the TOP left corner   
  160.          If GX1>GX2 : T=GX1 : GX1=GX2 : GX2=T : End If 
  161.          If GY1>GY2 : T=GY1 : GY1=GY2 : GY2=T : End If 
  162.       End If 
  163.       Rem Wait until mouse button is released
  164.    Until GRABBED
  165.    Rem Restore writing mode to normal 
  166.    Gr Writing 1
  167. End Proc
  168.  
  169. Procedure _LOAD_GRAB[G,SF,BF]
  170.    Screen Hide 1 : Screen Show 0
  171.    NUM=SF : If NUM<2 Then NUM=2
  172.    If Length(5)<1 Then BANK_DONE=0 : Screen Hide 0 : Screen Show 1 : Pop Proc
  173.    Wait Vbl : FRAMES=Frame Play(5,BF,0) : Screen Swap 
  174.    GROWBOX
  175.    If GX1=GX2 Then GX2=GX2+2
  176.    If GY1=GY2 Then GY2=GY2+2
  177.    Screen Open 3,640,15,2,Hires : Screen 3 : Palette $111,$FFF : Curs Off : Paper 0 : Pen 1 : Text 2,7,"Left Mouse = Continue.                              Right Mouse = Cancel "
  178.    Do 
  179.       If Mouse Key=1 Then Screen Close 3 : Goto OKAY
  180.       If Mouse Key=2 Then Screen Close 3 : Screen Hide 0 : Screen Show 1 : Goto OOPS
  181.    Loop : Screen Close 3 : Screen 0
  182.    
  183.    OKAY:
  184.    Change Mouse 3
  185.    For N=BF To NUM
  186.       Wait Vbl : FRAMES=Frame Play(5,N,0) : Wait Vbl : Get Bob 0,G,GX1,GY1 To GX2,GY2 : Inc G
  187.    Next N
  188.    Change Mouse 2
  189.    BANK_DONE=1
  190.    Screen Hide 0 : Screen Show 1
  191.    OOPS:
  192. End Proc
  193.  
  194. ' ********************************************************   
  195. ' ********************************************************   
  196.  
  197. CMAP : Rem set colours for screen 
  198. SETUP_ZONES
  199. 'N=Execall(-132) : Rem Forbid ()...Switch off Multi-tasking For Big Anims! On a Slug 68k'  
  200. '                                     Remember to include the line N=Execall(-138) aswell'   
  201.  
  202. ' *******************************************************************  
  203.  
  204. Change Mouse 2 : Rem Cross Hairs
  205. Repeat 
  206.    If Mouse Zone Then MZ=Mouse Zone : MESSAGE[MZ,BF,SF,G]
  207.    If Mouse Zone=2 and Mouse Key=1 Then Erase 5 : _OPEN[SF] : Screen 1 : Screen Hide 0
  208.    If Mouse Zone=3 and Mouse Key=2 Then Bob Off : Bob Update : Erase 1 : GONE=1
  209.    If Mouse Zone=3 and Mouse Key=1 and FILE=1 Then GONE=0 : Screen 0 : Screen Hide 1 : _LOAD_GRAB[G,SF,BF] : Screen 1 : Screen Hide 0
  210.    If Mouse Zone=4 and Mouse Key=1 and GONE=0 Then Gosub TESTER
  211.    If Mouse Zone=5 and Mouse Key=1 and BANK_DONE=1 Then SAVIT
  212.    If Mouse Zone=6 and Mouse Key=1 Then Dec G : Wait 1 : Text 27,170,"     " : G$=Str$(G) : Text 29,170,G$ : Screen Copy Logic To Physic : If G<=1 Then G=1 : G$=Str$(G) : Text 29,170,G$ : Screen Copy Logic To Physic
  213.    If Mouse Zone=7 and Mouse Key=1 Then Inc G : Wait 1 : Text 27,170,"     " : G$=Str$(G) : Text 29,170,G$ : Screen Copy Logic To Physic
  214.    If Mouse Zone=8 and Mouse Key=2 and BF<=SF-1 Then Dec SF : Wait 1 : Text 47,116,"    " : SF$=Str$(SF) : Text 51,116,SF$ : Screen Copy Logic To Physic : If SF<=1 Then SF=1 : SF$=Str$(SF) : Text 54,116,SF$ : Screen Copy Logic To Physic
  215.    If Mouse Zone=9 and Mouse Key=2 and BF<=SF-1 Then Inc SF : Wait 1 : Text 47,116,"    " : SF$=Str$(SF) : Text 51,116,SF$ : Screen Copy Logic To Physic
  216.    If Mouse Zone=8 and Mouse Key=1 and BF<SF-1 Then Dec BF : Wait 1 : Text 14,116,"     " : BF$=Str$(BF) : Text 14,116,BF$ : Screen Copy Logic To Physic : If BF<2 Then BF=1 : G$=Str$(BF) : Text 14,116,BF$ : Screen Copy Logic To Physic
  217.    If Mouse Zone=9 and Mouse Key=1 and BF<SF-1 Then Inc BF : Wait 1 : Text 14,116,"    " : BF$=Str$(BF) : Text 14,116,BF$ : Screen Copy Logic To Physic
  218.    If Mouse Zone=10 and Mouse Key=1 Then _LOAD_BANK
  219.    If Mouse Key Then Paper 0 : Pen 15 : Locate 1,30 : Print F/1000;"k ","Chip";Chip Free/1000;"k " : Locate 19,30 : Print "Total";(Chip Free+Fast Free)/1000;"k" : Screen Copy Logic To Physic
  220.    TIME$[CFLAG] : Text 255,248,Param$ : Rem You don't need this but I hate flipping to see the time etc... 
  221.    Bob 1,1,1,G : Wait Vbl : Bob Update 
  222.    If BF=SF Then SF=SF+2
  223. Until Mouse Zone=1 and Mouse Key
  224. 'N=Execall(-138) : Rem Permit()... Switch On Multi-Tasking ! ALWAYS call this after Exec call'   
  225. Fade 4 : Wait 50 : Screen Close 2 : Edit 
  226.  
  227. ' ************ File Stuff **********   
  228.  
  229. Procedure SAVIT
  230.    F$=Fsel$("","","Save Bob Bank As")
  231.    If F$<>"" Then 
  232.          Save F$,1
  233. End Proc
  234.  
  235. Procedure _LOAD_BANK
  236.    F$=Fsel$("*.abk","","Load a Bob Bank")
  237.    If F$<>""
  238.       F2$=Right$(F$,3)
  239.       If F2$="abk"
  240.          Erase 1
  241.          Load F$
  242.          A$="" : A=0 : Repeat : A$=A$+Chr$(Peek(Start(1)-8+A)) : Inc A : Until A=8
  243.          If A$<>"Sprites "
  244.             F$=""
  245.          End If 
  246.       End If 
  247.    End If 
  248. End Proc
  249.  
  250. ' *********** Bob Viewing ********** 
  251.  
  252. TESTER:
  253. Bob Off : Wait Vbl : Bob Update : Wait Vbl : Screen To Back 1 : Wait Vbl : Screen Show 0 : Wait Vbl : Screen 0
  254. Screen 0 : Cls 0
  255. If Length(1)>1 Then Get Bob Palette 
  256. Repeat 
  257.    DWN[60,60,SF,G]
  258. Until Mouse Key
  259. Bob Off : Wait Vbl : Bob Update 
  260. Screen To Back 0 : Wait Vbl : Screen To Front 1 : Screen To Front 2
  261. Screen 1
  262. CMAP
  263. Return 
  264.  
  265. Procedure DWN[X,Y,SF,G]
  266.    For N=G To SF
  267.       Wait Vbl : Bob 1,X,Y,N : Wait Vbl : Bob Update 
  268.    Next N
  269. End Proc
  270.  
  271. '*********************************** 
  272.  
  273. Procedure MESSAGE[Z,BF,SF,G]
  274.    Screen 2 : Cls 0
  275.    G$=Str$(G) : BF$=Str$(BF) : SF$=Str$(SF)
  276.    If Z=2 Then S$=" Load an IFF Anim sequence.  Starting from"+BF$+" To "+SF$
  277.    If Z=3 Then S$=" Grab Bobs From Anim sequence. Starting at Bob Number"+G$+" Ending"+SF$
  278.    If Z=4 Then S$=" View Bobs "+G$+" To "+SF$+"       Hold down LEFT MOUSE button to exit"
  279.    If Z=5 Then S$=" Save Bob bank to disc"
  280.    If Z=6 Then S$=" Decrease Bob image number... Bob currently set at "+G$
  281.    If Z=7 Then S$=" Increase Bob image number... Bob currently set at "+G$
  282.    If Z=8 Then S$=" Decrease Start/End of Anim using LEFT/RIGHT MOUSE BUTTON "+BF$+SF$
  283.    If Z=9 Then S$=" Increase Start/End of Anim using LEFT/RIGHT MOUSE BUTTON "+BF$+SF$
  284.    If Z=10 Then S$=" Load a Bob Bank"
  285.    If Z=1 Then S$="Quit    -No Banks Are Erased-"
  286.    Text 30,7,S$
  287.    Repeat 
  288.    Until Mouse Key
  289.    Screen 1
  290. End Proc
  291. Procedure TIME$[CFLAG]
  292.    If CFLAG=1 Then TIME$="-- -- --" : Goto FIN
  293.    T$=Space$(12)
  294.    Dreg(1)=Varptr(T$)
  295.    RIEN=Doscall(-192)
  296.    MN=Leek(Varptr(T$)+4)
  297.    SEC=Leek(Varptr(T$)+8)
  298.    H=MN/60 : H$=Mid$(Str$(H),2) : If Len(H$)<2 : H$="0"+H$ : End If 
  299.    M=MN mod 60 : M$=Mid$(Str$(M),2) : If Len(M$)<2 : M$="0"+M$ : End If 
  300.    S=SEC/50 : S$=Mid$(Str$(S),2) : If Len(S$)<2 : S$="0"+S$ : End If 
  301.    TIME$=H$+":"+M$+":"+S$
  302.    FIN:
  303. End Proc[TIME$]